package com.aprointeractive.android.justwar.activity;

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class BridgePlugin extends CordovaPlugin {
	public final static String ME = "BridgePlugin";

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.cordova.api.CordovaPlugin#execute(java.lang.String,
	 * org.json.JSONArray, org.apache.cordova.api.CallbackContext)
	 * 
	 * 플러그인 호출 시 진입부
	 */
	public boolean execute(String action, JSONArray args,
			CallbackContext callbackContext) throws JSONException {
		Log.e(ME, "execute Bridge");
		try {
			if (action.equals("network")) {
				String message = args.getString(0);
				this.network(message, callbackContext);
				return true;
			} else if (action.equals("login")) {
				String message = args.getString(0);
				this.login(message, callbackContext);
				return true;
			} else if (action.equals("changemenu")) {
				String message = args.getString(0);
				this.changemenu(message, callbackContext);
				return true;
			} else if (action.equals("touch")) {
				String message = args.getString(0);
				this.touch(message, callbackContext);
				return true;
			} else {
				String message = "BridgePlugin.java : Unknown Action!! \n message : "
						+ args.getString(0);
				this.error(message, callbackContext);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

		return false;
	}

	/*
	 * 아래 부분엔 해당 이벤트를 각각 처리하기 위한 루틴이 있음
	 */

	/*
	 * 인터넷 연결이 끊겼을 때 처리
	 */
	private void network(String message, CallbackContext callbackContext) {
		if (message != null && message.length() > 0) {
			callbackContext.success(message);
		} else {
			callbackContext.error("Error");
		}
	}

	/*
	 * 로그인 메시지 처리
	 */
	private void login(String message, CallbackContext callbackContext) {
		if (message.equals("success")) {
			callbackContext.success(message);
		} else if (message.equals("fail")) {
			callbackContext.success(message);
		} else {
			callbackContext.error("Login Error");
		}
	}

	/*
	 * 메뉴 체인지 메시지 처리 화면 하단의 메뉴 버튼의 활성화/비활성화 컨트롤
	 */
	private void changemenu(String message, CallbackContext callbackContext) {
		JustwarActivity.controlMenuButton(Integer.parseInt(message));
	}

	/*
	 * 터치 메시지 처리 화면 전체의 터치 기능 컨트롤 자바스크립트에서 enable, disable로 구분하여 호출한다.
	 * 
	 * enable : 터치 적용 disable : 터치 미적용
	 */
	private void touch(String message, CallbackContext callbackContext) {
		if (message.equals("enable")) {
			JustwarActivity.setTouchState(true);
			callbackContext.success(message);
		} else if (message.equals("disable")) {
			JustwarActivity.setTouchState(false);
			callbackContext.success(message);
		} else {
			callbackContext.error("error");
		}
	}

	/*
	 * 에러 메시지 처리
	 */
	private void error(String message, CallbackContext callbackContext) {
		JSONObject json;

		if (message != null && message.length() > 0) {
			try {
				json = new JSONObject().put("event", "error");
				json.put("message", message);
				callbackContext.success();

				// Add code that control this application state
				// ex) terminated or restore state
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			callbackContext.error("Error");
		}
	}

}
